home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / source / gfxgdi.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-17  |  12.8 KB  |  466 lines

  1.  
  2. // gfxgdi.vpp
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "gfxgdi.h"
  8.  
  9. GDIDRIVER::GDIDRIVER ()
  10.   {
  11.     #if defined (__FORWINDOWS__)
  12.       Info->bmiHeader.biSize = sizeof ( BITMAPINFOHEADER );
  13.       Info->bmiHeader.biWidth = 0;            // ?
  14.       Info->bmiHeader.biHeight = 0;           // ?
  15.       Info->bmiHeader.biPlanes = 1;
  16.       Info->bmiHeader.biBitCount = 0;         // ?
  17.       Info->bmiHeader.biCompression = BI_RGB;
  18.       Info->bmiHeader.biSizeImage = 0;        // ?
  19.       Info->bmiHeader.biXPelsPerMeter = 0;
  20.       Info->bmiHeader.biYPelsPerMeter = 0;
  21.       Info->bmiHeader.biClrUsed = 0;
  22.       Info->bmiHeader.biClrImportant = 0;
  23.  
  24.       LogPal = (LOGPALETTE*)malloc((sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*256));;
  25.       LogPal->palVersion = 0x300;
  26.       LogPal->palNumEntries = 256;
  27.  
  28.       // Create Identity Palette
  29.       WORD *Pal;
  30.       Pal = (WORD*)&(Info->bmiColors[0]);
  31.       INT i;
  32.       for (i=0;i<256;i++)
  33.         {
  34.           *Pal++ = (WORD)i;
  35.         } // End for
  36.     #endif
  37.   } // End of Constructor for GDIDRIVER
  38.  
  39. GDIDRIVER::~GDIDRIVER ()
  40.   {
  41.     #if defined (__FORWINDOWS__)
  42.       if (LogPal!=NULL)
  43.         free (LogPal);
  44.       LogPal = NULL;  
  45.     #endif  
  46.   } // End of Destructor for GDIDRIVER
  47.  
  48. BOOLEAN GDIDRIVER::SetUp ( DISPLAYDATA *Data )
  49.   {
  50.     if (Data)
  51.       {}  
  52.     return SUCCESS;
  53.   } // End of SetUp for GDIDRIVER
  54.  
  55. VOID GDIDRIVER::Reset ()
  56.   {
  57.   } // End of Reset for GDIDRIVER
  58.  
  59. VOID GDIDRIVER::Clear ( HDISPLAY hDisplay, LONG Color )
  60.   {
  61.     if (hDisplay)
  62.       {}
  63.     if (Color)
  64.       {}
  65.     #if defined (__FORWINDOWS__)
  66.       LONG Wd,Ht;
  67.       Wd = GetWidth ( hDisplay );
  68.       Ht = GetHeight ( hDisplay );
  69.       FillRect ( hDisplay, 0, 0, Wd, Ht, Color );
  70.     #else
  71.     #endif
  72.   } // End of Clear for GDIDRIVER
  73.  
  74. LONG GDIDRIVER::GetWidth ( HDISPLAY hDisplay )
  75.   {
  76.     #if defined (__FORWINDOWS__)
  77.       RECT Rect;
  78.       GetClipBox ( hDisplay, &Rect );
  79.       return Rect.right;
  80.     #elif defined (__FOROS2__)
  81.       if (hDisplay)
  82.         {}
  83.       return 0;
  84.     #elif defined (__FORDOS__)
  85.       if (hDisplay)
  86.         {}
  87.       return 0;
  88.     #endif
  89.   } // End of GetWidth for GDIDRIVER
  90.  
  91. LONG GDIDRIVER::GetHeight ( HDISPLAY hDisplay )
  92.   {
  93.     #if defined (__FORWINDOWS__)
  94.       RECT Rect;
  95.       GetClipBox ( hDisplay, &Rect );
  96.       return Rect.bottom;
  97.     #elif defined (__FOROS2__)
  98.       if (hDisplay)
  99.         {}
  100.       return 0;
  101.     #elif defined (__FORDOS__)
  102.       if (hDisplay)
  103.         {}
  104.       return 0;
  105.     #endif
  106.   } // End of GetHeight for GDIDRIVER
  107.  
  108. VOID GDIDRIVER::DisplayImage ( IMAGE *Image, LONG Sx, LONG Sy,
  109.                                LONG Wd, LONG Ht, HDISPLAY Dest,
  110.                                LONG Cx, LONG Cy, LONG DestWd, LONG DestHt )
  111.   {
  112.     #if defined (__FORWINDOWS__)
  113.       #if defined (__FORWIN32__)
  114.         HDISPLAY hMemDisplay;
  115.         if (Image->IsAttached())
  116.           {
  117.             hMemDisplay = Image->GetMemDisplay ();
  118.             if ((MagH==DivH)&&(MagV==DivH))
  119.               {
  120.                 BitBlt ( Dest, Cx, Cy, Wd, Ht, hMemDisplay,
  121.                          Sx, Sy, SRCCOPY );
  122.               } // End if
  123.             else
  124.               {
  125.                 StretchBlt ( Dest, Cx, Cy, DestWd, DestHt, hMemDisplay,
  126.                              Sx, Sy, Wd, Ht, SRCCOPY );    
  127.               } // End else             
  128.             return;  
  129.           } // End if
  130.       #endif
  131.         
  132.       BYTE *SrcBuffer;
  133.       Info->bmiHeader.biWidth = Image->GetWidth();
  134.       Info->bmiHeader.biBitCount = (SHORT)Image->GetBits();
  135.       Info->bmiHeader.biSizeImage = Image->GetBytesPerRow()*Image->GetHeight();
  136.      
  137.       SrcBuffer = Image->GetBuffer ();
  138.       if (MagV==DivV)
  139.         DestWd = Wd;
  140.       if (MagH==DivH)
  141.         DestHt = Ht;
  142.         
  143.       if (Image->GetDirection()==IMAGE_TOPDOWN)
  144.         {
  145.           Info->bmiHeader.biHeight = -Image->GetHeight();
  146.           #if defined (__FORWIN386__)
  147.             StretchDIBits ( Dest, (short)Cx, (short)Cy, (short)DestWd, (short)DestHt,
  148.                             (short)Sx, (short)(Image->GetHeight()-Sy-Ht),
  149.                             (short)Wd, (short)Ht, SrcBuffer,
  150.                             Info, DIB_PAL_COLORS, SRCCOPY );
  151.           #else
  152.             StretchDIBits ( Dest, Cx, Cy, DestWd, DestHt, Sx, Image->GetHeight()-Sy-Ht,
  153.                             Wd, Ht, SrcBuffer,
  154.                             Info, DIB_PAL_COLORS, SRCCOPY );
  155.           #endif                
  156.         } // End if  
  157.       else
  158.         {
  159.           Info->bmiHeader.biHeight = Image->GetHeight();
  160.           #if defined (__FORWIN386__)
  161.             StretchDIBits ( Dest, (short)Cx, (short)Cy, (short)DestWd, (short)DestHt,
  162.                             (short)Sx, (short)(Image->GetHeight()-Sy-Ht),
  163.                             (short)Wd, (short)Ht, SrcBuffer,
  164.                             Info, DIB_PAL_COLORS, SRCCOPY );
  165.           #else
  166.             StretchDIBits ( Dest, Cx, Cy, DestWd, DestHt, Sx, Image->GetHeight()-Sy-Ht,
  167.                             Wd, Ht, SrcBuffer,
  168.                             Info, DIB_PAL_COLORS, SRCCOPY );
  169.           #endif
  170.         } // End else
  171.     #else
  172.       if (Image)
  173.         {}
  174.       if (Dest)
  175.         {}
  176.       if (Sx&Sy&Cx&Cy&Wd&Ht)
  177.         {}
  178.       if (DestWd&DestHt)
  179.         {}  
  180.     #endif
  181.   } // End of DisplayImage for GDIDRIVER
  182.  
  183. VOID GDIDRIVER::SetPalette ( HDISPLAY hDisplay, RGBPALETTE *Pal )
  184.   {
  185.     if (Pal==NULL)
  186.       return;
  187.  
  188.     #if defined (__FORWINDOWS__)
  189.       RGBCOLOR *Entry;
  190.       HPALETTE hPal,OldPal;      
  191.  
  192.       if (LogPal==NULL)
  193.         return;
  194.         
  195.       Entry = Pal->GetEntry ();
  196.  
  197.       INT i;
  198.       for (i=0;i<256;i++)
  199.         {
  200.           LogPal->palPalEntry[i].peRed = Entry[i].Red;  
  201.           LogPal->palPalEntry[i].peGreen = Entry[i].Green;  
  202.           LogPal->palPalEntry[i].peBlue = Entry[i].Blue;  
  203.           LogPal->palPalEntry[i].peFlags = 0;  
  204.         } // End for
  205.         
  206.       hPal = CreatePalette ( (LOGPALETTE*)LogPal );     
  207.       OldPal = SelectPalette ( hDisplay, hPal, TRUE );
  208.       RealizePalette ( hDisplay );
  209.       DeleteObject ( OldPal );
  210.       DeleteObject ( hPal );
  211.     #else
  212.       if (hDisplay)
  213.         {}
  214.       if (Pal)
  215.         {}
  216.     #endif
  217.   } // End of SetPalette for GDIDRIVER
  218.  
  219. VOID GDIDRIVER::GetPalette ( HDISPLAY hDisplay, RGBPALETTE *Pal )
  220.   {
  221.     #if defined (__FORWINDOWS__)
  222.       RGBCOLOR *Entry;
  223.  
  224.       Entry = Pal->GetEntry ();
  225.       if (Entry==NULL)
  226.         return;
  227.  
  228.       GetSystemPaletteEntries ( hDisplay, 0, 256, LogPal->palPalEntry );
  229.  
  230.       INT i;
  231.       for (i=0;i<256;i++)
  232.         {
  233.           Entry[i].Red = LogPal->palPalEntry[i].peRed;
  234.           Entry[i].Green = LogPal->palPalEntry[i].peGreen;
  235.           Entry[i].Blue = LogPal->palPalEntry[i].peBlue;            
  236.         } // End for
  237.     #else
  238.       if (hDisplay)
  239.         {}
  240.       if (Pal)
  241.         {}
  242.     #endif
  243.   } // End of GetPalette for GDIDRIVER
  244.  
  245. VOID GDIDRIVER::DrawLine ( HDISPLAY hDisplay, LONG x1, LONG y1, LONG x2, LONG y2,
  246.                            COLOR Color )
  247.   {
  248.     #if defined (__FORWINDOWS__)
  249.       HGDIOBJ OldPen;
  250.       HPEN hPen;
  251.  
  252.       hPen = CreatePen ( PS_SOLID, 1, Color );
  253.  
  254.       OldPen = SelectObject ( hDisplay, hPen );
  255.  
  256.       #if defined (__FORWIN386__)
  257.         MoveToEx ( hDisplay, (short)x1, (short)y1, NULL );
  258.         LineTo ( hDisplay, (short)x2, (short)y2 );
  259.       #else
  260.         MoveToEx ( hDisplay, x1, y1, NULL );
  261.         LineTo ( hDisplay, x2, y2 );
  262.       #endif
  263.       
  264.       SelectObject ( hDisplay, OldPen );
  265.       DeleteObject ( hPen );
  266.     #else
  267.       if (hDisplay)
  268.         {}
  269.       if (x1&y1&x2&y2)
  270.         {}
  271.       if (Color)
  272.         {}
  273.     #endif
  274.   } // End of DrawLine for GDIDRIVER
  275.  
  276. VOID GDIDRIVER::DrawRect ( HDISPLAY hDisplay, LONG x1, LONG y1, LONG x2, LONG y2,
  277.                            COLOR Color )
  278.   {
  279.     #if defined (__FORWINDOWS__)
  280.       HGDIOBJ OldPen;
  281.       HGDIOBJ OldBrush;
  282.       HPEN hPen;
  283.  
  284.       hPen = CreatePen ( PS_SOLID, 1, Color );
  285.  
  286.       OldPen = SelectObject ( hDisplay, hPen );
  287.       OldBrush = SelectObject ( hDisplay, GetStockObject ( NULL_BRUSH ) );
  288.  
  289.       #if defined (__FORWIN386__)
  290.         Rectangle ( hDisplay, (short)x1, (short)y1, (short)x2, (short)y2 );
  291.       #else
  292.         Rectangle ( hDisplay, x1, y1, x2, y2 );
  293.       #endif
  294.       
  295.       SelectObject ( hDisplay, OldPen );
  296.       SelectObject ( hDisplay, OldBrush );
  297.       DeleteObject ( hPen );
  298.     #else
  299.       if (hDisplay)
  300.         {}
  301.       if (x1&y1&x2&y2)
  302.         {}
  303.       if (Color)
  304.         {}
  305.     #endif
  306.   } // End of DrawRect for GDIDRIVER
  307.  
  308. VOID GDIDRIVER::FillRect ( HDISPLAY hDisplay, LONG x1, LONG y1, LONG x2, LONG y2,
  309.                            COLOR Color )
  310.   {
  311.     #if defined (__FORWINDOWS__)
  312.       HGDIOBJ OldPen;
  313.       HGDIOBJ OldBrush;
  314.       HPEN hPen;
  315.       HBRUSH hBrush;
  316.       LOGBRUSH lgb;
  317.  
  318.       hPen = CreatePen ( PS_SOLID, 1, Color );
  319.  
  320.       lgb.lbStyle = BS_SOLID;
  321.       lgb.lbColor = Color;
  322.       lgb.lbHatch = 0;
  323.  
  324.       hBrush = CreateBrushIndirect ( &lgb );
  325.       OldPen = SelectObject ( hDisplay, hPen );
  326.       OldBrush = SelectObject ( hDisplay, hBrush );
  327.  
  328.       #if defined (__FORWIN386__)
  329.         Rectangle ( hDisplay, (short)x1, (short)y1, (short)x2, (short)y2 );
  330.       #else
  331.         Rectangle ( hDisplay, x1, y1, x2, y2 );
  332.       #endif
  333.       
  334.       SelectObject ( hDisplay, OldPen );
  335.       SelectObject ( hDisplay, OldBrush );
  336.       DeleteObject ( hPen );
  337.       DeleteObject ( hBrush );
  338.     #else
  339.       if (hDisplay)
  340.         {}
  341.       if (x1&y1&x2&y2)
  342.         {}
  343.       if (Color)
  344.         {}
  345.     #endif
  346.   } // End of FillRect for GDIDRIVER
  347.  
  348. VOID GDIDRIVER::DrawPixel ( HDISPLAY hDisplay, LONG x, LONG y,
  349.                             COLOR Color )
  350.   {
  351.     #if defined (__FORWINDOWS__)
  352.       #if defined (__FORWIN386__)
  353.         SetPixel ( hDisplay, (short)x, (short)y, Color );
  354.       #else
  355.         SetPixel ( hDisplay, x, y, Color );
  356.       #endif
  357.     #else
  358.       if (hDisplay)
  359.         {}
  360.       if (x&y)
  361.         {}
  362.       if (Color)
  363.         {}
  364.     #endif
  365.   } // End of DrawPixel for GDIDRIVER
  366.  
  367. VOID GDIDRIVER::DrawEllipse ( HDISPLAY hDisplay, LONG Cx, LONG Cy, LONG Rx, LONG Ry,
  368.                               COLOR Color )
  369.   {
  370.     #if defined (__FORWINDOWS__)
  371.       HGDIOBJ OldPen;
  372.       HGDIOBJ OldBrush;
  373.       HPEN hPen;
  374.  
  375.       hPen = CreatePen ( PS_SOLID, 1, Color );
  376.  
  377.       OldPen = SelectObject ( hDisplay, hPen );
  378.       OldBrush = SelectObject ( hDisplay, GetStockObject ( NULL_BRUSH ) );
  379.  
  380.       #if defined (__FORWIN386__)
  381.         Ellipse ( hDisplay, (short)(Cx-Rx), (short)(Cy-Ry), (short)(Cx+Rx), (short)(Cy+Ry) );
  382.       #else
  383.         Ellipse ( hDisplay, Cx-Rx, Cy-Ry, Cx+Rx, Cy+Ry );
  384.       #endif
  385.       
  386.       SelectObject ( hDisplay, OldPen );
  387.       SelectObject ( hDisplay, OldBrush );
  388.       DeleteObject ( hPen );
  389.     #else
  390.       if (hDisplay)
  391.         {}
  392.       if (Cx&Cy&Rx&Ry)
  393.         {}
  394.       if (Color)
  395.         {}
  396.     #endif
  397.   } // End of DrawEllipse for GDIDRIVER
  398.  
  399. VOID GDIDRIVER::FillEllipse ( HDISPLAY hDisplay, LONG Cx, LONG Cy, LONG Rx, LONG Ry,
  400.                               COLOR Color )
  401.   {
  402.     #if defined (__FORWINDOWS__)
  403.       HGDIOBJ OldPen;
  404.       HGDIOBJ OldBrush;
  405.       HPEN hPen;
  406.       HBRUSH hBrush;
  407.       LOGBRUSH lgb;
  408.  
  409.       hPen = CreatePen ( PS_SOLID, 1, Color );
  410.  
  411.       lgb.lbStyle = BS_SOLID;
  412.       lgb.lbColor = Color;
  413.       lgb.lbHatch = 0;
  414.  
  415.       hBrush = CreateBrushIndirect ( &lgb );
  416.       OldPen = SelectObject ( hDisplay, hPen );
  417.       OldBrush = SelectObject ( hDisplay, hBrush );
  418.  
  419.       #if defined (__FORWIN386__)
  420.         Ellipse ( hDisplay, (short)(Cx-Rx), (short)(Cy-Ry), (short)(Cx+Rx), (short)(Cy+Ry));
  421.       #else
  422.         Ellipse ( hDisplay, Cx-Rx, Cy-Ry, Cx+Rx, Cy+Ry );
  423.       #endif
  424.  
  425.       SelectObject ( hDisplay, OldPen );
  426.       SelectObject ( hDisplay, OldBrush );
  427.       DeleteObject ( hPen );
  428.       DeleteObject ( hBrush );
  429.     #else
  430.       if (hDisplay)
  431.         {}
  432.       if (Cx&Cy&Rx&Ry)
  433.         {}
  434.       if (Color)
  435.         {}
  436.     #endif
  437.   } // End of FillRect for GDIDRIVER
  438.  
  439. VOID GDIDRIVER::DrawText ( HDISPLAY hDisplay, STRING Text, LONG x, LONG y,
  440.                            COLOR Color )
  441.   {
  442.     #if defined (__FORWINDOWS__)
  443.       COLOR OldColor;
  444.  
  445.       OldColor = SetTextColor ( hDisplay, Color );
  446.       
  447.       #if defined (__FORWIN386__)
  448.         MoveToEx ( hDisplay, (short)x, (short)y, NULL );
  449.         TextOut ( hDisplay, (short)x, (short)y, Text, (short)strlen ( Text ) );
  450.       #else
  451.         MoveToEx ( hDisplay, x, y, NULL );
  452.         TextOut ( hDisplay, x, y, Text, strlen ( Text ) );
  453.       #endif
  454.       SetTextColor ( hDisplay, OldColor );
  455.     #else
  456.       if (hDisplay)
  457.         {}
  458.       if (Text)
  459.         {}
  460.       if (x&y)
  461.         {}
  462.       if (Color)
  463.         {}
  464.     #endif
  465.   } // End of DrawText for GDIDRIVER
  466.